02. 定义函数 I

圆柱体积函数

我们以前使用过几种 Python 内置函数。现在,我们可以尝试自己编写函数。

我们将编写一个计算圆柱体积的函数:圆柱的高乘以其半径的平方,再乘以 pi。

已标明圆柱的半径 (r) 和高 (h)。
图片改编自 [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Circular_cylinder_rh.svg)

已标明圆柱的半径 (r) 和高 (h)。
图片改编自 Wikimedia Commons

下面是一个计算圆柱体积的函数定义:

def cylinder_volume(height, radius):
    pi = 3.14159
    return height * pi * radius ** 2

在定义 cylinder_volume 函数后,可以按如下方法使用该函数:

>>> cylinder_volume(10, 3)
282.7431

现在我们来仔细分析一下这个函数的定义:

分析函数定义

函数定义的元素

函数定义的元素

函数头

  • (1) def 关键字表示以下代码即函数定义。
  • (2) def 后跟的是函数的名称,在这个例子中是 cylinder_volume 。函数名称应该是一个单词,可使用下划线连接两个单词。
  • (3) 函数定义第一行的最后一个元素是函数所需的参数(函数名的命名规则与变量名相同)。函数的参数是调用函数时传入的值;在函数体中将使用这些参数。请用逗号隔开参数,并将它们放在一对括号中。如果编写一个不带参数的函数,应使用一对空括号 () 。函数定义的第一行以冒号 : 结尾。

下面是一个不带参数的函数示例:

def print_greeting():
    print('Hello World!')

该函数将打印出 "Hello World"。由于这个函数没有参数,因此我们使用一对空括号。

函数体

  • (4) 使用四个空格缩进函数体。函数体是函数发挥作用的载体。我们可以在函数体内引用参数变量,以及定义新的变量。在此定义的 pi 变量是一个局部变量,这意味着它只能在 cylinder_volume 函数的函数体中使用。在其他地方尝试访问该变量会导致错误。
  • (5) 使用 return 关键字可获取函数结果。 return 之后的表达式值是函数的输出值。
  • (6) 在这个示例中,我们返回一个表达式(即圆柱体积的公式)的值。请注意,该表达式先计算 radius ** 2 ,这是因为在数学运算中,先计算乘方,再计算乘法。(有时为了避免混淆,在涉及大量运算的数学表达式中,你也可以添加括号,如 height * pi * (radius ** 2) 。)如果你不想在设置返回值时使用表达式,也可以提前在函数体中计算体积,然后将其存储在名为 volume 的变量中,这将使我们可以 return volume

练习:人口密度函数

请编写一个名为 population_density 的函数,该函数有两个参数, population land_area (以平方公里计),并返回一个根据这些值计算出的人口密度。下面的练习中有两个测试案例,你可以使用这两个案例验证自己的函数是否可用。编写函数后,请使用测试答案按钮测试代码。

Start Quiz:

# todo: define a function named `population_density` that takes two arguments, 
# `population` and `land_area` (in square kilometres), and returns a population 
# density calculated from those values.

# Your code goes here!




# Here are test cases to verify that your function works as expected:
test1 = population_density(10, 1)
expected_result1 = 10
print("expected result: {}, actual result: {}".format(expected_result1, test1))

test2 = population_density(864816, 121.4)
expected_result2 = 7123.6902801
print("expected result: {}..., actual result: {}".format(expected_result2, test2))